"""
怎么理解多态
1）多态顾名思义 多种状态，不同的对象调用相同的方法，表现出不同的状态，称为多态
2）多态通常作用在继承关系上

多态的好处
1）增加了程序的灵活性
2）增加了程序的可扩展性

特别说明：python的多态特点
1）python 中函数的参数是没有类型限制的，所以多态在 python 中的体现并不是很严谨
2）python 并不要求严格的继承关系，关注的不是对象的类型本身，而是它是否具有要调用的方法
3）当调用对象成员的时候，会和对象本身动态关联
"""


class Animal:

    def cry(self): ...


class Cat(Animal):

    def cry(self):
        print("小猫 喵喵叫...")


class Dog(Animal):

    def cry(self):
        print("小狗 汪汪叫...")


class Pig(Animal):

    def cry(self):
        print("小猪 咯咯叫...")

# 注意：在 python 面向对象编程中，子类对象可以传递给父类对象，但是父类对象不能传递给子类对象
def func(animal: Animal):
    animal.cry()


cat: Cat = Cat()
dog: Dog = Dog()
pig: Pig = Pig()


func(cat)
func(dog)
func(pig)